#include <iostream>

const int size = 10;

class Queue
{
public:
    Queue():front(0), rear(0){}

    // 入队列
    void Push(int element)
    {
        array[rear++] = element;
        rear %= size;
    }

    // 出队列
    void Pop()
    {
        front++;
        front %= size;
    }

    // 取出队头元素
    int &GetFront()
    {
        return array[front];
    }

    // 判断队列是否为空
    bool IsEmpty()
    {
        return front == rear;
    }

    // 队列为满
    bool IsFull()
    {
        return (rear+1) % size == front; // （记住！！！）
    }

private:
    int array[size];
    int front; // 队头指针
    int rear; // 队尾指针
};


int main()
{
    Queue q;
    for(int i = 0; i < 10; i++)
    {
        if(q.IsFull() == true)
        {
            std::cout<<"当前队列满："<<i+1<<std::endl;
            return -1;
        }
        q.Push(i+1);
    }

    while(q.IsEmpty() == false)
    {
        std::cout<<q.GetFront()<<" ";
        q.Pop();
    }
    std::cout<<std::endl;

    return 0;
}